# 方便起见一般都会先定义编译器链接器
CC = gcc
CXX = g++
LD = g++

# 正则表达式表示目录下所有.c文件，相当于：SRCS = *.c
SRCS = $(wildcard *.c, *.cc)

# OBJS表示SRCS中把列表中的.c全部替换为.o，相当于：OBJS = *.o
OBJS = $(patsubst %cc, %o, $(SRCS))

# 可执行文件的名字
TARGET = exe

# .PHONE伪目标
.PHONY:all clean

# 要生成的目标文件
all: $(TARGET)

# 第一行依赖关系：冒号后面为依赖的文件，相当于exe: *.o
# 第二行规则：$@表示目标文件，$^表示所有依赖文件，$<表示第一个依赖文件
$(TARGET): $(OBJS)
	$(LD) -o $@ $^

# 上一句目标文件依赖一大堆.o文件，这句表示所有.o都由相应名字的.c文件自动生成
%.o:%.cc
	$(CXX) -c $^

# make clean删除所有.o和目标文件
clean:
	rm -f $(OBJS) $(TARGET)
